www.gusucode.com > 实用的网页Js图片滚动 无缝控制滚动代码源码程序 > 实用的网页Js图片滚动 无缝控制滚动代码/prototype图片滚动/prototype图片滚动/imgLoopView.js

    // Download by http://www.srcfans.com
var imgLoopView = Class.create();
imgLoopView.prototype = {
	initialize:function(id,direction){
		this.step = 1;
		this.interval = 0.01;
		this.gap = 10;//图片之间的间隔
		this.direction = direction || "Left";
		this.scrollId;
		this.oA = $(id);//遮罩
		this.o1;//滚动内容
		this.o2;//滚动内容克隆
		this.maskW = this.oA.getWidth();//遮罩的宽度,由style里的width获得
		this.scrollW = 0; //滚动元素的总宽度
		this.init();
	},

	init:function(){
		this.render();
		this.start();
		this.oA.observe("mouseover",this.stop.bind(this));
		this.oA.observe("mouseout",this.start.bind(this));
		this.oA.observe("mouseover",this.imgOver);
		this.oA.observe("mouseout",this.imgOut);
	},

	render:function(){
		this.oA.insert(new Element("ul"));
		this.o1 = this.oA.down();
		this.o2 = this.o1.next();

		this.o1.setStyle({
			left:"0px"
		});
		this.o1.childElements().each(function(o,i){
			var oW = o.getWidth();
			o.setStyle({
				position:"absolute",
				left:this.scrollW+"px"
			})
			this.scrollW += this.gap+oW;
		}.bind(this));
		this.o2.innerHTML = this.o1.innerHTML;
		this.o2.setStyle({
			left:this.scrollW+"px"
		});
	},

	start:function() {
		if(!this.scrollId){
			if (this.direction == "Left"){
				this.scrollId = new PeriodicalExecuter(this.moveLeft.bind(this,this.step), this.interval);
			}else{
				this.scrollId = new PeriodicalExecuter(this.moveRight.bind(this,this.step), this.interval);
			}
		}
	},

	stop:function() {
		if(this.scrollId){
			this.scrollId.stop();
			this.scrollId = 0;
		}
	},

	toggle:function() {
		this.scrollId?this.stop():this.start();
	},

	goLeft:function() {
		this.direction = "Left";
		this.stop();
		this.start();
	},

	goRight:function() {
		this.direction = "Right";
		this.stop();
		this.start();
	},

	toggleDir:function() {
		this.direction=="Left"?this.goRight():this.goLeft();
	},

	moveLeft:function(step) {
		var o1Left = parseInt(this.o1.getStyle("left"));
		var o2Left = parseInt(this.o2.getStyle("left"))
		if (-o1Left>this.scrollW)
		{
			this.o1.setStyle({
				left:o2Left+this.scrollW+"px"
			});
		}
		if (-o2Left>this.scrollW)
		{
			this.o2.setStyle({
				left:o1Left+this.scrollW+"px"
			});
		}
		
		this.o1.setStyle({
			left: parseInt(this.o1.getStyle("left"))-step+"px"
		});
		this.o2.setStyle({
			left: parseInt(this.o2.getStyle("left"))-step+"px"
		});
	},

	moveRight:function(step) {
		var o1Left = parseInt(this.o1.getStyle("left"));
		var o2Left = parseInt(this.o2.getStyle("left"))
		if (o1Left>this.scrollW)
		{
			this.o1.setStyle({
				left:o2Left-this.scrollW+"px"
			});
		}
		if (o2Left>this.scrollW)
		{
			this.o2.setStyle({
				left:o1Left-this.scrollW+"px"
			});
		}
		
		this.o1.setStyle({
			left: parseInt(this.o1.getStyle("left"))+step+"px"
		});
		this.o2.setStyle({
			left: parseInt(this.o2.getStyle("left"))+step+"px"
		});
	},

	imgOver:function(e) {
		var o = e.element();
		if (o.tagName == "IMG")
		{
			o.setStyle({ border:"1px solid #FFF" });
			new Effect.Opacity(o, { from: 0, to: 1, duration: 0.3 });
		}
	},
// Download by http://www.srcfans.com
	imgOut:function(e) {
		var o = e.element();
		if (o.tagName == "IMG")
		{
			o.setStyle({ border:"1px solid #666" });

		}
	}
};